package com.kexio.common.config;

import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * 现代化 Redis 配置方案（备选方案）
 * 
 * 使用最简单的String序列化，在应用层处理类型转换
 * 完全避免ObjectMapper配置冲突
 * 
 * @author Kexio Team
 */
@Configuration
@ConditionalOnProperty(name = "kexio.redis.modern-mode", havingValue = "true", matchIfMissing = false)
public class ModernRedisConfiguration {

    /**
     * 现代化 RedisTemplate - 全String序列化方案
     * 
     * 优势：
     * 1. 零配置冲突 - 不涉及ObjectMapper
     * 2. 透明可见 - 可以直接查看Redis存储的JSON
     * 3. 跨版本兼容 - 不依赖Java类结构
     * 4. 高性能 - String序列化是最快的
     * 
     * @Primary - 优先选择此bean，避免与Spring Boot默认StringRedisTemplate冲突
     */
    @Bean("modernRedisTemplate")
    @Primary
    public RedisTemplate<String, String> modernRedisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate<String, String> template = new RedisTemplate<>();
        template.setConnectionFactory(connectionFactory);
        
        // 全部使用String序列化器
        StringRedisSerializer stringSerializer = new StringRedisSerializer();
        template.setKeySerializer(stringSerializer);
        template.setValueSerializer(stringSerializer);
        template.setHashKeySerializer(stringSerializer);
        template.setHashValueSerializer(stringSerializer);
        
        template.afterPropertiesSet();
        return template;
    }
}
